package request;

import record.Address;
import util.HashedPassword;

/**
 * A class that represents a request to create a new user.
 * @author Sean Freitag
 * @author Jacob Freemyer
 * @author Stephan Jossie
 *
 */
@SuppressWarnings("serial")
public class NewUserRequest implements Request
{

	/**
	 * First name of user
	 */
	private String firstName;
	
	/**
	 * Last name of user
	 */
	private String lastName;
	
	/**
	 * Password for user
	 */
	private HashedPassword password;
	
	/**
	 * Address of user
	 */
	private Address address;
	
	/**
	 * Email address (Identifier) of user
	 */
	private String emailAddress;
	
	/**
	 * Credit card number for use of the system
	 */
	private String creditCardNum;
	
	/**
	 * Security code for credit card
	 */
	private String creditCardSecurityCode;
	
	/**
	 * Brand of credit card
	 */
	private String creditCardBrand; // optional? CCs starting with 4 are visa,
									// with 51-55 master card, etc.
	
	/**
	 * Creates a NewUserRequest request that takes data given by the user and adds them to the sever and data link.
	 */
	public NewUserRequest() {
	
	}

	/**
	 * Getter for first name of user
	 * @return
	 * 		Users first name
	 */
	public String getFirstName() {
		return firstName;
	}

	/**
	 * Getter for last name of user
	 * @return
	 * 		Users last name
	 */
	public String getLastName() {
		return lastName;
	}

	/**
	 * Getter for hashed out password of user
	 * @return
	 * 		Hashed version of users password for security
	 */
	public HashedPassword getPassword() {
		return password;
	}

	/**
	 * Getter for users address
	 * @return
	 * 		The address of the user
	 */
	public Address getAddress() {
		return address;
	}

	/**
	 * Getter for email of user
	 * @return
	 * 		The email address for the user
	 */
	public String getEmailAddress() {
		return emailAddress;
	}

	/**
	 * Getter for credit card number of the user
	 * @return
	 * 		Credit card number, 16 digits
	 */
	public String getCreditCardNum() {
		return creditCardNum;
	}

	/**
	 * Setter for setting the first name of the user
	 * @param firstName
	 * Users first name
	 */
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	/**
	 * Setter used to set the last name of the user
	 * @param lastName
	 * Users last name
	 */
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}

	/**
	 * Setter to set the password for the user
	 * @param password
	 * Users password
	 */
	public void setPassword(HashedPassword password) {
		this.password = password;
	}

	/**
	 * Setter to set the users address
	 * @param address
	 * Users address
	 */
	public void setAddress(Address address) {
		this.address = address;
	}

	/**
	 * Setter to set the users email address/username
	 * @param emailAddress
	 * users email address
	 */
	public void setEmailAddress(String emailAddress) {
		this.emailAddress = emailAddress;
	}

	/**
	 * Setter to set the users credit card number
	 * @param creditCardNum
	 * Users credit card number
	 */
	public void setCreditCardNum(String creditCardNum) {
		this.creditCardNum = creditCardNum;
	}

	/**
	 * Setter to set the users credit card security code
	 * @param creditCardSecurityCode
	 * Users credit card security code
	 */
	public void setCreditCardSecurityCode(String creditCardSecurityCode) {
		this.creditCardSecurityCode = creditCardSecurityCode;
	}

	/**
	 * Setter to set the users credit card brand
	 * @param creditCardBrand
	 * Users credit card brand
	 */
	public void setCreditCardBrand(String creditCardBrand) {
		this.creditCardBrand = creditCardBrand;
	}

	/**
	 * Getter for credit card security code on the back of the card.
	 * @return
	 * 		Users credit card security code
	 */
	public String getCreditCardSecurityCode() {
		return creditCardSecurityCode;
	}

	/**
	 * Getter for credit card brand
	 * @return
	 * 		Users credit card brand or type of card
	 */
	public String getCreditCardBrand() {
		return creditCardBrand;
	}
	
}
